package com.springboot.file.converter;

import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.converters.WriteConverterContext;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import com.alibaba.excel.util.StringUtils;
import com.springboot.file.enums.NeedPayAccStatus;


public class NeedPayAccStatusConvertor implements Converter<String> {
    @Override
    public Class<?> supportJavaTypeKey() {
        return NeedPayAccStatus.class;
    }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    /**
     * 从excel读数据时候调用
     * 单元格数据转java数据
     *
     * @param cellData            Excel 单元格的数据，<?> 表示通配符，意味着可以接受任何类型的数据
     * @param contentProperty     Excel 内容的元数据，例如列标题、格式等
     * @param globalConfiguration 一般是全局配置
     * @return
     */
    @Override
    public String convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty,
                                    GlobalConfiguration globalConfiguration) {
        String value = cellData.getStringValue();
        if (StringUtils.isBlank(value)) {
            // 未知
            return null;
        }
        if (value.contains("否")) {
            return NeedPayAccStatus.NO.getType();
        }
        if (value.contains("是")) {
            return NeedPayAccStatus.YES.getType();
        }
        return null;
    }

    /**
     * 写数据到excel里面
     * java数据转单元格数据
     *
     * @param context 上下文对象,可以获取值
     * @return
     */
    @Override
    public WriteCellData<?> convertToExcelData(WriteConverterContext<String> context) {
        String value = context.getValue();
        if (ObjectUtil.equals(value, NeedPayAccStatus.NO.getType())) {
            return new WriteCellData<>(NeedPayAccStatus.NO.getName());
        }
        if (ObjectUtil.equals(value, NeedPayAccStatus.YES.getType())) {
            return new WriteCellData<>(NeedPayAccStatus.YES.getName());
        }
        return new WriteCellData<>("");
    }

}